import { defineStore } from 'pinia';
import { store } from '@/store'; // 确保这个路径是正确的，它应该指向您的 Pinia 根存储实例

// 定义锁信息的接口（在 JavaScript 中不需要显式声明接口，但为了清晰起见，我保留了这些类型注释）
const lockInfoSchema = {
  isLock: { type: Boolean, default: false }, // 是否锁定屏幕
  password: { type: String, default: '' } // 锁屏密码
};

// 定义存储的状态
const state = () => ({
  lockInfo: { ...lockInfoSchema } // 使用展开运算符来设置默认值
});

// 定义 getters
const getters = {
  getLockInfo: state => state.lockInfo
};

// 定义 actions
const actions = {
  setLockInfo(context, lockInfo) {
    context.lockInfo = lockInfo;
  },
  resetLockInfo(context) {
    context.lockInfo = { ...lockInfoSchema }; // 重置为默认值
  },
  unLock(context, password) {
    if (context.lockInfo.password === password) {
      context.resetLockInfo();
      return true;
    } else {
      return false;
    }
  }
};

// 创建存储
export const useLockStore = defineStore('lock', {
  state,
  getters,
  actions,
  persist: true // 启用持久化
});

// 定义一个不使用根存储实例参数的函数（在 JavaScript 中，由于类型系统的缺失，这变得不那么必要）
export const useLockStoreWithOut = () => {
  // 注意：在 Pinia 中，通常不需要将根存储实例传递给 useLockStore，
  // 因为 Pinia 会自动处理存储的注册和提供。
  // 如果您确实有一个特定的 store 实例需要传递（这通常不是标准用法），
  // 请确保您了解为什么要这样做，并相应地调整您的 Pinia 配置。
  // 在这个例子中，我们简单地调用 useLockStore 而不传递任何参数。
  return useLockStore();
};

// 注意：上面的 useLockStoreWithOut 函数实际上可能是不必要的，
// 因为您可以直接从其他组件或服务中调用 useLockStore() 来获取存储实例。
// 如果您确实需要传递一个特定的 store 实例，请确保您的 Pinia 设置正确，
// 并考虑是否真的有必要这样做。